home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 2 / Gekikoh Dennoh Club Vol. 2 (Japan).7z / Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin / fsw / zm302 / zm302_s.lzh / MPSRC045.LZH / ADP_EFFECT.HAS < prev    next >
Text File  |  1996-11-18  |  11KB  |  432 lines

  1. *=======================================================
  2. *
  3. *    IOCS各周波数ADPCM->PCM変換
  4. *
  5. *=======================================================
  6.  
  7. AtoP_EFCT01_08:    sub.l        #MIX_SIZE/8,EFCT_PCM_LEN(a5)    * 1/8再生
  8.         bgt        @f
  9.         bsr        AtoP_EFCT_end        * 軽さ重視です。すまん。
  10.  
  11. @@:        move.w        EFCT_AtoP_Y(a5),d1    * d1.w = PCM予測値
  12.         movea.l        EFCT_PCM_ADR(a5),a0    * a0.l = ADPCMアドレス
  13.         movea.l        EFCT_AtoP_X(a5),a2    * a2.l = ADPCM->PCM変換テーブルアドレス
  14.  
  15.         moveq.l        #MIX_SIZE/8-1,d6    * ADPCM -> PCM 変換
  16.  
  17. 1:        moveq.l        #0,d0            * (4)
  18.         move.b        (a0)+,d0        * (8)
  19.         add.w        d0,d0            * (4)
  20.         adda.w        d0,a2            * (8)
  21.         add.w        (a2),d1            * (8)
  22.         add.w        d1,(a1)+
  23.         add.w        d1,(a1)+
  24.         add.w        d1,(a1)+
  25.         add.w        d1,(a1)+
  26.         add.w        d1,(a1)+
  27.         add.w        d1,(a1)+
  28.         add.w        d1,(a1)+
  29.         add.w        d1,(a1)+
  30.         add.w        256*2(a2),d1        * (12)
  31.         add.w        d1,(a1)+
  32.         add.w        d1,(a1)+
  33.         add.w        d1,(a1)+
  34.         add.w        d1,(a1)+
  35.         add.w        d1,(a1)+
  36.         add.w        d1,(a1)+
  37.         add.w        d1,(a1)+
  38.         add.w        d1,(a1)+
  39.         adda.w        256*2*2(a2),a2        * (16)
  40.  
  41.         dbra        d6,1b
  42.  
  43.         move.w        d1,EFCT_AtoP_Y(a5)    * d1.w = PCM予測値
  44.         move.l        a0,EFCT_PCM_ADR(a5)    * a0.l = ADPCMアドレス
  45.         move.l        a2,EFCT_AtoP_X(a5)    * a2.l = ADPCM->PCM変換テーブルアドレス
  46.  
  47.         rts
  48.  
  49. AtoP_EFCT01_06:    sub.l        #MIX_SIZE/6,EFCT_PCM_LEN(a5)    * 1/6再生
  50.         bgt        @f
  51.         bsr        AtoP_EFCT_end
  52.  
  53. @@:        move.w        EFCT_AtoP_Y(a5),d1    * d1.w = PCM予測値
  54.         movea.l        EFCT_PCM_ADR(a5),a0    * a0.l = ADPCMアドレス
  55.         movea.l        EFCT_AtoP_X(a5),a2    * a2.l = ADPCM->PCM変換テーブルアドレス
  56.  
  57.         moveq.l        #MIX_SIZE/6-1,d6    * ADPCM -> PCM 変換
  58.  
  59. 1:        moveq.l        #0,d0            * (4)
  60.         move.b        (a0)+,d0        * (8)
  61.         add.w        d0,d0            * (4)
  62.         adda.w        d0,a2            * (8)
  63.         add.w        (a2),d1            * (8)
  64.         add.w        d1,(a1)+
  65.         add.w        d1,(a1)+
  66.         add.w        d1,(a1)+
  67.         add.w        d1,(a1)+
  68.         add.w        d1,(a1)+
  69.         add.w        d1,(a1)+
  70.         add.w        256*2(a2),d1        * (12)
  71.         add.w        d1,(a1)+
  72.         add.w        d1,(a1)+
  73.         add.w        d1,(a1)+
  74.         add.w        d1,(a1)+
  75.         add.w        d1,(a1)+
  76.         add.w        d1,(a1)+
  77.         adda.w        256*2*2(a2),a2        * (16)
  78.  
  79.         dbra        d6,1b
  80.  
  81.         move.w        d1,EFCT_AtoP_Y(a5)    * d1.w = PCM予測値
  82.         move.l        a0,EFCT_PCM_ADR(a5)    * a0.l = ADPCMアドレス
  83.         move.l        a2,EFCT_AtoP_X(a5)    * a2.l = ADPCM->PCM変換テーブルアドレス
  84.  
  85.         rts
  86.  
  87. AtoP_EFCT01_04:    sub.l        #MIX_SIZE/4,EFCT_PCM_LEN(a5)    * 1/4再生(3.9kHz)
  88.         bgt        @f
  89.         bsr        AtoP_EFCT_end        * 軽さ重視です。すまん。
  90.  
  91. @@:        move.w        EFCT_AtoP_Y(a5),d1    * d1.w = PCM予測値
  92.         movea.l        EFCT_PCM_ADR(a5),a0    * a0.l = ADPCMアドレス
  93.         movea.l        EFCT_AtoP_X(a5),a2    * a2.l = ADPCM->PCM変換テーブルアドレス
  94.  
  95.         moveq.l        #MIX_SIZE/4-1,d6    * ADPCM -> PCM 変換
  96.  
  97. 1:        moveq.l        #0,d0            * (4)
  98.         move.b        (a0)+,d0        * (8)
  99.         add.w        d0,d0            * (4)
  100.         adda.w        d0,a2            * (8)
  101.         add.w        (a2),d1            * (8)
  102.         add.w        d1,(a1)+
  103.         add.w        d1,(a1)+
  104.         add.w        d1,(a1)+
  105.         add.w        d1,(a1)+
  106.         add.w        256*2(a2),d1        * (12)
  107.         add.w        d1,(a1)+
  108.         add.w        d1,(a1)+
  109.         add.w        d1,(a1)+
  110.         add.w        d1,(a1)+
  111.         adda.w        256*2*2(a2),a2        * (16)
  112.  
  113.         dbra        d6,1b
  114.  
  115.         move.w        d1,EFCT_AtoP_Y(a5)    * d1.w = PCM予測値
  116.         move.l        a0,EFCT_PCM_ADR(a5)    * a0.l = ADPCMアドレス
  117.         move.l        a2,EFCT_AtoP_X(a5)    * a2.l = ADPCM->PCM変換テーブルアドレス
  118.  
  119.         rts
  120.  
  121. AtoP_EFCT01_03:    sub.l        #MIX_SIZE/3,EFCT_PCM_LEN(a5)    * 1/3再生(5.2kHz)
  122.         bgt        @f
  123.         bsr        AtoP_EFCT_end
  124.  
  125. @@:        move.w        EFCT_AtoP_Y(a5),d1    * d1.w = PCM予測値
  126.         movea.l        EFCT_PCM_ADR(a5),a0    * a0.l = ADPCMアドレス
  127.         movea.l        EFCT_AtoP_X(a5),a2    * a2.l = ADPCM->PCM変換テーブルアドレス
  128.  
  129.         moveq.l        #MIX_SIZE/3-1,d6    * ADPCM -> PCM 変換
  130.  
  131. 1:        moveq.l        #0,d0            * (4)
  132.         move.b        (a0)+,d0        * (8)
  133.         add.w        d0,d0            * (4)
  134.         adda.w        d0,a2            * (8)
  135.         add.w        (a2),d1            * (8)
  136.         add.w        d1,(a1)+
  137.         add.w        d1,(a1)+
  138.         add.w        d1,(a1)+
  139.         add.w        256*2(a2),d1        * (12)
  140.         add.w        d1,(a1)+
  141.         add.w        d1,(a1)+
  142.         add.w        d1,(a1)+
  143.         adda.w        256*2*2(a2),a2        * (16)
  144.  
  145.         dbra        d6,1b
  146.  
  147.         move.w        d1,EFCT_AtoP_Y(a5)    * d1.w = PCM予測値
  148.         move.l        a0,EFCT_PCM_ADR(a5)    * a0.l = ADPCMアドレス
  149.         move.l        a2,EFCT_AtoP_X(a5)    * a2.l = ADPCM->PCM変換テーブルアドレス
  150.  
  151.         rts
  152.  
  153.  
  154. AtoP_EFCT01_02:    sub.l        #MIX_SIZE/2,EFCT_PCM_LEN(a5)    * 1/2再生(7.8kHz)
  155.         bgt        @f
  156.         bsr        AtoP_EFCT_end
  157.  
  158. @@:        move.w        EFCT_AtoP_Y(a5),d1    * d1.w = PCM予測値
  159.         movea.l        EFCT_PCM_ADR(a5),a0    * a0.l = ADPCMアドレス
  160.         movea.l        EFCT_AtoP_X(a5),a2    * a2.l = ADPCM->PCM変換テーブルアドレス
  161.  
  162.         moveq.l        #MIX_SIZE/2-1,d6    * ADPCM -> PCM 変換
  163.  
  164. 1:        moveq.l        #0,d0            * (4)
  165.         move.b        (a0)+,d0        * (8)
  166.         add.w        d0,d0            * (4)
  167.         adda.w        d0,a2            * (8)
  168.         add.w        (a2),d1            * (8)
  169.         add.w        d1,(a1)+
  170.         add.w        d1,(a1)+
  171.         add.w        256*2(a2),d1        * (12)
  172.         add.w        d1,(a1)+
  173.         add.w        d1,(a1)+
  174.         adda.w        256*2*2(a2),a2        * (16)
  175.  
  176.         dbra        d6,1b
  177.  
  178.         move.w        d1,EFCT_AtoP_Y(a5)    * d1.w = PCM予測値
  179.         move.l        a0,EFCT_PCM_ADR(a5)    * a0.l = ADPCMアドレス
  180.         move.l        a2,EFCT_AtoP_X(a5)    * a2.l = ADPCM->PCM変換テーブルアドレス
  181.  
  182.         rts
  183.  
  184. AtoP_EFCT02_03:    sub.l        #MIX_SIZE*2/3,EFCT_PCM_LEN(a5)    * 2/3再生(10.4kHz)
  185.         bgt        @f
  186.         bsr        AtoP_EFCT_end
  187.  
  188. @@:        move.w        EFCT_AtoP_Y(a5),d1    * d1.w = PCM予測値
  189.         movea.l        EFCT_PCM_ADR(a5),a0    * a0.l = ADPCMアドレス
  190.         movea.l        EFCT_AtoP_X(a5),a2    * a2.l = ADPCM->PCM変換テーブルアドレス
  191.  
  192.         moveq.l        #(MIX_SIZE*2)/3/8-1,d6    * ADPCM -> PCM 変換
  193. 1:
  194.         REPT        8            * 8倍展開
  195.         moveq.l        #0,d0            * (4)
  196.         move.b        (a0)+,d0        * (8)
  197.         add.w        d0,d0            * (4)
  198.         adda.w        d0,a2            * (8)
  199.         add.w        (a2),d1            * (8)
  200.         add.w        d1,(a1)+
  201.         add.w        d1,(a1)+
  202.         add.w        256*2(a2),d1        * (12)
  203.         add.w        d1,(a1)+
  204.         adda.w        256*2*2(a2),a2        * (16)
  205.         ENDM
  206.         dbra        d6,1b
  207.  
  208.         move.w        d1,EFCT_AtoP_Y(a5)    * d1.w = PCM予測値
  209.         move.l        a0,EFCT_PCM_ADR(a5)    * a0.l = ADPCMアドレス
  210.         move.l        a2,EFCT_AtoP_X(a5)    * a2.l = ADPCM->PCM変換テーブルアドレス
  211.  
  212.         rts
  213.  
  214.  
  215. AtoP_EFCT01_01:    sub.l        #MIX_SIZE,EFCT_PCM_LEN(a5)    * 1/1 再生 (15.6kHz)
  216.         bgt        @f
  217.         bsr        AtoP_EFCT_end
  218.  
  219. @@:        move.w        EFCT_AtoP_Y(a5),d1    * d1.w = PCM予測値
  220.         movea.l        EFCT_PCM_ADR(a5),a0    * a0.l = ADPCMアドレス
  221.         movea.l        EFCT_AtoP_X(a5),a2    * a2.l = ADPCM->PCM変換テーブルアドレス
  222.  
  223.         moveq.l        #MIX_SIZE/8-1,d6    * ADPCM -> PCM 変換
  224. 1:
  225.         REPT        8            * 8倍展開
  226.         moveq.l        #0,d0            * (4)
  227.         move.b        (a0)+,d0        * (8)
  228.         add.w        d0,d0            * (4)
  229.         adda.w        d0,a2            * (8)
  230.         add.w        (a2),d1            * (8)
  231.         add.w        d1,(a1)+
  232.         add.w        256*2(a2),d1        * (12)
  233.         add.w        d1,(a1)+
  234.         adda.w        256*2*2(a2),a2        * (16)
  235.         ENDM
  236.         dbra        d6,1b
  237.  
  238.         move.w        d1,EFCT_AtoP_Y(a5)    * d1.w = PCM予測値
  239.         move.l        a0,EFCT_PCM_ADR(a5)    * a0.l = ADPCMアドレス
  240.         move.l        a2,EFCT_AtoP_X(a5)    * a2.l = ADPCM->PCM変換テーブルアドレス
  241.  
  242.         rts
  243.  
  244. AtoP_EFCT04_03:    sub.l        #MIX_SIZE*4/3,EFCT_PCM_LEN(a5)    * 4/3再生(20.8kHz)
  245.         bgt        @f
  246.         bsr        AtoP_EFCT_end
  247.  
  248. @@:        move.w        EFCT_AtoP_Y(a5),d1    * d1.w = PCM予測値
  249.         movea.l        EFCT_PCM_ADR(a5),a0    * a0.l = ADPCMアドレス
  250.         movea.l        EFCT_AtoP_X(a5),a2    * a2.l = ADPCM->PCM変換テーブルアドレス
  251.  
  252.         moveq.l        #(MIX_SIZE*2)/3/8-1,d6    * ADPCM -> PCM 変換
  253. 1:
  254.         REPT        8            * 8倍展開
  255.         moveq.l        #0,d0            * (4)
  256.         move.b        (a0)+,d0        * (8)
  257.         add.w        d0,d0            * (4)
  258.         adda.w        d0,a2            * (8)
  259.         add.w        (a2),d1            * (8)
  260.         add.w        d1,(a1)+
  261.         add.w        256*2(a2),d1        * (12)
  262.         add.w        d1,(a1)+
  263.         adda.w        256*2*2(a2),a2        * (16)
  264.  
  265.         moveq.l        #0,d0            * (4)
  266.         move.b        (a0)+,d0        * (8)
  267.         add.w        d0,d0            * (4)
  268.         adda.w        d0,a2            * (8)
  269.         add.w        (a2),d1            * (8)
  270.         add.w        d1,(a1)+
  271.         add.w        256*2(a2),d1        * (12)
  272.         adda.w        256*2*2(a2),a2        * (16)
  273.         ENDM
  274.         dbra        d6,1b
  275.  
  276.         move.w        d1,EFCT_AtoP_Y(a5)    * d1.w = PCM予測値
  277.         move.l        a0,EFCT_PCM_ADR(a5)    * a0.l = ADPCMアドレス
  278.         move.l        a2,EFCT_AtoP_X(a5)    * a2.l = ADPCM->PCM変換テーブルアドレス
  279.  
  280.         rts
  281.  
  282. AtoP_EFCT02_01:    sub.l        #MIX_SIZE*2,EFCT_PCM_LEN(a5)    * 2/1 再生
  283.         bgt        @f
  284.         bsr        AtoP_EFCT_end
  285.  
  286. @@:        move.w        EFCT_AtoP_Y(a5),d1    * d1.w = PCM予測値
  287.         movea.l        EFCT_PCM_ADR(a5),a0    * a0.l = ADPCMアドレス
  288.         movea.l        EFCT_AtoP_X(a5),a2    * a2.l = ADPCM->PCM変換テーブルアドレス
  289.  
  290.         moveq.l        #MIX_SIZE/4-1,d6    * ADPCM -> PCM 変換
  291. 1:
  292.         REPT        8            * 8倍展開
  293.         moveq.l        #0,d0            * (4)
  294.         move.b        (a0)+,d0        * (8)
  295.         add.w        d0,d0            * (4)
  296.         adda.w        d0,a2            * (8)
  297.         add.w        (a2),d1            * (8)
  298.         add.w        d1,(a1)+
  299.         add.w        256*2(a2),d1        * (12)
  300.         adda.w        256*2*2(a2),a2        * (16)
  301.         ENDM
  302.         dbra        d6,1b
  303.  
  304.         move.w        d1,EFCT_AtoP_Y(a5)    * d1.w = PCM予測値
  305.         move.l        a0,EFCT_PCM_ADR(a5)    * a0.l = ADPCMアドレス
  306.         move.l        a2,EFCT_AtoP_X(a5)    * a2.l = ADPCM->PCM変換テーブルアドレス
  307.  
  308.         rts
  309.  
  310. AtoP_EFCT08_03:    sub.l        #MIX_SIZE*8/3,EFCT_PCM_LEN(a5)    * 8/3再生
  311.         bgt        @f
  312.         bsr        AtoP_EFCT_end
  313.  
  314. @@:        move.w        EFCT_AtoP_Y(a5),d1    * d1.w = PCM予測値
  315.         movea.l        EFCT_PCM_ADR(a5),a0    * a0.l = ADPCMアドレス
  316.         movea.l        EFCT_AtoP_X(a5),a2    * a2.l = ADPCM->PCM変換テーブルアドレス
  317.  
  318.         moveq.l        #(MIX_SIZE*2)/3/8-1,d6    * ADPCM -> PCM 変換
  319. 1:
  320.         REPT        8            * 8倍展開
  321.         moveq.l        #0,d0            * (4)
  322.         move.b        (a0)+,d0        * (8)
  323.         add.w        d0,d0            * (4)
  324.         adda.w        d0,a2            * (8)
  325.         add.w        (a2),d1            * (8)
  326.         add.w        d1,(a1)+
  327.         add.w        256*2(a2),d1        * (12)
  328.         adda.w        256*2*2(a2),a2        * (16)
  329.  
  330.         moveq.l        #0,d0            * (4)
  331.         move.b        (a0)+,d0        * (8)
  332.         add.w        d0,d0            * (4)
  333.         adda.w        d0,a2            * (8)
  334.         add.w        (a2),d1            * (8)
  335.         add.w        256*2(a2),d1        * (12)
  336.         add.w        d1,(a1)+
  337.         adda.w        256*2*2(a2),a2        * (16)
  338.  
  339.         moveq.l        #0,d0            * (4)
  340.         move.b        (a0)+,d0        * (8)
  341.         add.w        d0,d0            * (4)
  342.         adda.w        d0,a2            * (8)
  343.         add.w        (a2),d1            * (8)
  344.         add.w        256*2(a2),d1        * (12)
  345.         adda.w        256*2*2(a2),a2        * (16)
  346.  
  347.         moveq.l        #0,d0            * (4)
  348.         move.b        (a0)+,d0        * (8)
  349.         add.w        d0,d0            * (4)
  350.         adda.w        d0,a2            * (8)
  351.         add.w        (a2),d1            * (8)
  352.         add.w        d1,(a1)+
  353.         add.w        256*2(a2),d1        * (12)
  354.         adda.w        256*2*2(a2),a2        * (16)
  355.  
  356.         ENDM
  357.         dbra        d6,1b
  358.  
  359.         move.w        d1,EFCT_AtoP_Y(a5)    * d1.w = PCM予測値
  360.         move.l        a0,EFCT_PCM_ADR(a5)    * a0.l = ADPCMアドレス
  361.         move.l        a2,EFCT_AtoP_X(a5)    * a2.l = ADPCM->PCM変換テーブルアドレス
  362.  
  363.         rts
  364.  
  365. AtoP_EFCT04_01:    sub.l        #MIX_SIZE*4,EFCT_PCM_LEN(a5)    * 1/1 再生 (15.6kHz)
  366.         bgt        @f
  367.         bsr        AtoP_EFCT_end
  368.  
  369. @@:        move.w        EFCT_AtoP_Y(a5),d1    * d1.w = PCM予測値
  370.         movea.l        EFCT_PCM_ADR(a5),a0    * a0.l = ADPCMアドレス
  371.         movea.l        EFCT_AtoP_X(a5),a2    * a2.l = ADPCM->PCM変換テーブルアドレス
  372.  
  373.         moveq.l        #MIX_SIZE/4-1,d6    * ADPCM -> PCM 変換
  374. 1:
  375.         REPT        8            * 8倍展開
  376.         moveq.l        #0,d0            * (4)
  377.         move.b        (a0)+,d0        * (8)
  378.         add.w        d0,d0            * (4)
  379.         adda.w        d0,a2            * (8)
  380.         add.w        (a2),d1            * (8)
  381.         add.w        d1,(a1)+
  382.         add.w        256*2(a2),d1        * (12)
  383.         adda.w        256*2*2(a2),a2        * (16)
  384.  
  385.         moveq.l        #0,d0            * (4)
  386.         move.b        (a0)+,d0        * (8)
  387.         add.w        d0,d0            * (4)
  388.         adda.w        d0,a2            * (8)
  389.         add.w        (a2),d1            * (8)
  390.         add.w        256*2(a2),d1        * (12)
  391.         adda.w        256*2*2(a2),a2        * (16)
  392.         ENDM
  393.         dbra        d6,1b
  394.  
  395.         move.w        d1,EFCT_AtoP_Y(a5)    * d1.w = PCM予測値
  396.         move.l        a0,EFCT_PCM_ADR(a5)    * a0.l = ADPCMアドレス
  397.         move.l        a2,EFCT_AtoP_X(a5)    * a2.l = ADPCM->PCM変換テーブルアドレス
  398.  
  399.         rts
  400.  
  401.  
  402. AtoP_EFCT_end:    move.b        EFCT_PLAY_MODE(a5),d0
  403.         bne        @f
  404. 1:        clr.b        ADPCM_SYSWORK.w            * 通常再生
  405.         clr.b        EFCT_PLAY_FLAG(a5)
  406.         addq.l        #4,sp
  407.         move.w        EFCT_AtoP_Y(a5),d0
  408.         rts
  409. @@:        cmpi.b        #$01,d0
  410.         bne        @f
  411.         subi.l        #1,EFCT_CTBL_N(a5)        * アレイチェーン
  412.         beq        1b
  413.         movea.l        EFCT_CTBL_ADR(a5),a0
  414.         move.l        (a0)+,EFCT_PCM_ADR(a5)
  415.         clr.w        EFCT_PCM_LEN(a5)
  416.         move.w        (a0)+,EFCT_PCM_LEN+2(a5)
  417.         move.l        a0,EFCT_CTBL_ADR(a5)
  418.         move.l        #AtoP_tbl,EFCT_AtoP_X(a5)
  419.         clr.w        EFCT_AtoP_Y(a5)
  420.         rts
  421.  
  422. @@:        move.l        EFCT_CTBL_ADR(a5),d0        * リンクアレイチェーン
  423.         beq        1b
  424.         movea.l        d0,a0
  425.         move.l        (a0)+,EFCT_PCM_ADR(a5)
  426.         clr.w        EFCT_PCM_LEN(a5)
  427.         move.w        (a0)+,EFCT_PCM_LEN+2(a5)
  428.         move.l        (a0)+,EFCT_CTBL_ADR(a5)
  429.         move.l        #AtoP_tbl,EFCT_AtoP_X(a5)
  430.         clr.w        EFCT_AtoP_Y(a5)
  431.         rts
  432.